package com.liu.project.utils;

import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @program: project
 * @description: 图片上传
 * @author: 86187
 * @create: 2022-04-22 08:11
 **/

@Component
public class UploadUtil {

    public static String  PATH= "D:/idealC/gitcode/project/src/main/resources/static";

    public static String upload(MultipartFile file, String saveUrl) throws IOException {

        //获取文件的内容
        InputStream is = file.getInputStream();
        //获取原始文件名
        String originalFilename = file.getOriginalFilename();

        //生成一个uuid名称出来
        String uuidFilename = getUUIDName(originalFilename);

        File fileDir = new File(PATH+ saveUrl);


        if (fileDir.exists()){
            deleteFile(fileDir);//如果存在则删除文件,即替换

        }
         fileDir.mkdirs();
        //创建新的文件夹
        File newFile = new File(PATH + saveUrl, uuidFilename);
        //将文件输出到目标的文件中
        file.transferTo(newFile);

        //将保存的文件路径返回
        String savePath =saveUrl + "/" + uuidFilename;

        return savePath;
    }

    /**
     * 获取随机名称
     *
     * @param realName 真实名称
     * @return uuid 随机名称
     */
    public static String getUUIDName(String realName) {
        //realname  可能是  1sfasdf.jpg   也可能是 1sfasdf 1
        //获取后缀名
        int index = realName.lastIndexOf(".");
        if (index == -1) {
            return UUID.randomUUID().toString().replace("-", "").toUpperCase();
        } else {
            return UUID.randomUUID().toString().replace("-", "").toUpperCase() + realName.substring(index);
        }
    }

    //删除File对象中抽象的路径方法
    public static void deleteFile(File dir) {

        //将file封装的路径下对象转换为数组
        File[] files = dir.listFiles();

        //判断这个数组为不为空,如果不为空,就执行内部代码
        if (files != null) {

            for (File file : files) {

                //判断是否为文件
                if (file.isFile()) {

                    //如果为文件,执行删除
                    file.delete();

                } else {
                    //如果不为文件,就(递归)进入这个文件夹,删除文件
                    deleteFile(file);
                }
            }

            //删除全部文件后删除空文件夹,最后删除自己
            dir.delete();
        }
    }

}
